#ifndef TINX_FIFO_H
#define TINX_FIFO_H

#include <tinx/types.h>

typedef struct fifo_t
{
    char *buf;
    int len;
    int read_ptr; // 下一个需要读取的字节在 buf 中的下标
    int write_ptr; // 下一个需要写入的字节在 buf 中的下标
} fifo_t;

// 检测 fifo 是否空
bool fifo_empty(fifo_t *fifo);

// 检测 fifo 是否满
bool fifo_full(fifo_t *fifo);

// 往 fifo 里放入一个字节
void fifo_put(fifo_t *fifo, char value);

// 从 fifo 中获取一个字节
char fifo_get(fifo_t *fifo);

// 初始化一个 fifo
void fifo_init(fifo_t *fifo, char *buf, int len);

#endif